package q80_removeDuplicates;

public class Solution_1 {
    public static void main(String[] args) {
        int[] a = {0,0,1,1,1,1,2,3,3};
        Solution_1 s= new Solution_1();
        System.out.println(s.removeDuplicates(a));
    }
    /*
    原地删除重复出现的元素 每个元素最多出现两次
    同样使用双指针的方式来解决
    但是需要引入count来计算元素重复出现的次数
    该题解相对繁琐
     */
    public int removeDuplicates(int[] nums) {
        if (nums.length <= 2) {
            return nums.length;
        }
        int p1 = 0, p2 = 1;
        int count = 0;
        // 循环内需要对应三种操作逻辑
        // 基本的操作逻辑是 我们最终返回的是p1所在的位置后一位的位置值
        // 所以我们的交换是基于p1后一位反复更新值
        // 假设一直没有碰到重复 那么就是p1后移 并更新为p2的值（此时p1 = p2） 然后p2后移
        while (p2 < nums.length) {
            // 1 第一次出现相等时 count++
            if (nums[p2] == nums[p1] && count == 0) {
                count++;
                p1++;
                nums[p1] = nums[p2];
                // p2++;

                // 2 当count大于等于1时 只需要不停将p2后移
            }else if (nums[p2] == nums[p1] && count >= 1) {
                // p2++;
            }else {
                // 3 元素不等时，则重置count
                count = 0;
                p1++;
                nums[p1] = nums[p2];
                // p2++;
            }
            // 将p2的移动抽取出来
            p2++;
        }

        return p1 + 1;
    }
}
